package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;

import negocio.Medico;
import negocio.ObraSocial;
import negocio.Paciente;
import negocio.PlanCobertura;
import negocio.Sistema;
import ventanas.VentanaABMObraSocial;
import ventanas.VentanaWarningEliminarEspecialidad;
import ventanas.VentanaWarningEliminarObraSocial;
import ventanas.VentanaWarningEliminarPlan;

public class ControladorABMObraSocial implements ActionListener{

	private VentanaABMObraSocial v;
	private Sistema sistema;
	private ObraSocial obraSocial;
	private List<PlanCobertura> planes;
	
	public ControladorABMObraSocial( VentanaABMObraSocial ventana,ObraSocial os) {
		this.v = ventana;
		this.sistema = Sistema.obtenerInstancia();
		this.obraSocial = os;
		this.planes = new ArrayList<>();
		if(os!=null){
			this.planes = os.getPlanes();
		}
	}

	public void actionPerformed(ActionEvent e) {
		
		if(e.getSource()==v.getBtnBajaOS()){
			List<Paciente>auxPacientes=sistema.obtenerPacientes();
			boolean flag=false;
			for (Paciente paciente : auxPacientes) {
				if (paciente.getObraSocial().equals(obraSocial));
					flag=true;
				break;
			}
			if (flag) {
				new VentanaWarningEliminarObraSocial();
			}else{
			
				sistema.eliminarObraSocial(obraSocial);
				v.dispose();
			}
			
		}
		
		if(e.getSource()==v.getBtnAgregarPlan()){
			if(this.hayDatosPlan()){
				PlanCobertura plan = new PlanCobertura();
				String nombrePlan = v.getTxtNombrePlan().getText();
				float cobertura = (float)v.getSpinnerCobertura().getValue();
				plan.setNombre(nombrePlan);
				plan.setCobertura(cobertura);
				planes.add(plan);
				DefaultListModel<PlanCobertura> modelo = (DefaultListModel<PlanCobertura>) v.getLista().getModel();
				modelo.addElement(plan);
				v.getLista().setModel(modelo);
				v.getLista().revalidate();
			}
		}
		
		if(e.getSource()==v.getBtnQuitarPlan()){
			
			int seleccionado = v.getLista().getSelectedIndex();
			
			List<Paciente>auxPacientes=sistema.obtenerPacientes();
			boolean flag=false;
			for (Paciente paciente : auxPacientes) {
				if (paciente.getPlan().equals(obraSocial.getPlanes().get(seleccionado)));
					flag=true;
				break;
			}
			
			if(seleccionado>=0 && flag!=true){
				DefaultListModel<PlanCobertura> modelo = (DefaultListModel<PlanCobertura>) v.getLista().getModel();
				modelo.remove(seleccionado);
				planes.remove(seleccionado);				
				v.getLista().revalidate();
			}else{
				new VentanaWarningEliminarPlan();
			}
		}
		
		if(e.getSource()==v.getChckbxEditarObraSocial()){
			v.habilitarCampos();
		}
		
		if(e.getSource()==v.getBtnGuardarModificaciones()){
			if(obraSocial==null){
				ObraSocial aux = new ObraSocial();
				aux.setNombre(v.getTxtNombreOS().getText());
				aux.setTelefono(v.getTxtTelefono().getText());
				aux.setSitioWeb(v.getTxtWeb().getText());
				aux.setPlanes(planes);
				sistema.guardarObraSocial(aux);
			}else{
				obraSocial.setNombre(v.getTxtNombreOS().getText());
				obraSocial.setTelefono(v.getTxtTelefono().getText());
				obraSocial.setSitioWeb(v.getTxtWeb().getText());
				obraSocial.setPlanes(planes);
				sistema.modificarObraSocial(obraSocial);
			}
			v.dispose();
		}
			
		if(e.getSource()==v.getBtnCancelar()){
			v.dispose();
		}
		
	}

	private boolean hayDatosPlan(){
		if (v.getTxtNombrePlan().getText().isEmpty())
			return false;
		return true;
	
	}

}
